#ifndef CommGWMgr_H
#define CommGWMgr_H
/********************************************************************************
** @ Date:2025/05/16
** @ Author: HanJiaXing
** @ Description:采集管理软件
** @ Version:1.0.0
** @ ClassName:CommGWMgr
** @ Fun:
********************************************************************************/

#include <QtWidgets/QMainWindow>
#include <QStandardItemModel>
#include <QTimer>
#include <QLibrary>
#include "ui_commgwmgr.h"

class CEpollServerMgr;
class LogModule;
class CSyncBaseTh;
class CommGWMgr : public QMainWindow
{
    Q_OBJECT

public:
    CommGWMgr(QWidget *parent = nullptr);
    ~CommGWMgr();

protected:
    void closeEvent(QCloseEvent *event);//关闭程序提醒

private:
    void initUi();          //初始化界面
    void initConnect();     //初始化槽函数连接
    void loadData();        //初始化数据
    void initTcpServer();   //初始化Tcp服务端
    void initSyncBase();    //初始化SyncBase线程
    void startUpJudge();    //启动状态判断
    void refushList();      //刷新界面中的管理树
    bool FindWidget(QString WidgetName);//查找制定的界面是否已经在tabWidget中打开，如果已经打卡则切换当前的tab页到对应界面并返回true，否则返回false
    void addWidgetToTab(QWidget* pWidget, QString sTitle, QString sObjName);//添加widget至tab页

private slots:
    void slotCloseTab(int index);			                     //点击tabWidget中的标签关闭按钮
    void treeViewTemplateDoubleClicked(const QModelIndex &index);//管理树双击信号槽函数
    void slotCustomContextMenu(const QPoint &);					 //右键树节点
    void slotPushButtonExpand();								 //全部展开
    void slotPushButtonShrink();								 //全部收缩
    void slotDataFlush();                                        //定时器刷新槽函数
    void slotActionStart();                                      //点击文件-启动
    void slotActionStop();                                       //点击文件-停止
    void slotActionReload();                                     //点击文件-重载
    void slotActionLog(bool bChecked);                           //点击视图-日志
    void slotActionTools(bool bChecked);                         //点击视图-工具栏
    void slotActionProject(bool bChecked);                       //点击视图-工程
    void slotActionRestore();                                    //点击工程-备份
    void slotActionBackup();                                     //点击工程-还原
    void slotActionSysConfig();                                  //点击编辑-系统配置
    void slotActionDrvConfig();                                  //点击编辑-驱动配置
    void slotActionAbout();                                      //点击帮助-关于
    void slotActionUserManual();                                 //点击帮助-使用手册
    void slotActionMonitor();                                    //点击工具-系统监视

private:
    Ui::CommGWMgrClass ui;
    QStandardItemModel *m_pTreeModel;//树节点Model
    LogModule* m_pLogModule;
    QTimer* m_pTimer;
    QMap<QString, QStandardItem*> m_mapItem;//树节点map数组，方便快速更新状态灯
    QMap<QString, QWidget*>	m_mapWidget;	//键：界面名称字符串  值：界面指针
    CSyncBaseTh* m_pSyncBaseTh;             //SyncBase操作线程
    CEpollServerMgr* m_pTcpServer;          //服务端
};
#endif
